《Hive数据仓库工具》
课程实训指导书
适用对象: 软件技术 撰写人: 何永亚 审核人: 苏秀芝 审查人: 蒋新民 审批人: 龚 波
二〇二五 年 二 月
课程名称 hive数据仓库工具 课程代码 0306232 课程计划课时 64 实训课时 32 所占比重 50% 实训目的
紧密围绕以hive大数据技术相关的知识点,考察学生hive的安装配置、Spark开发环境的搭建、hive sql的定义、数据、查询、分区表、分桶表、函数等的相关使用方法、以及使用hive进行大数据分析的常用数据流程与开发步骤。
二、实训要求
本课程主讲教师要求掌握Hadoop生态圈常用组件的搭建和使用,重点掌握hive的安装配置,hive sql的使用相关知识并能熟练应用;根据授课状况合理调整授课进度。学生为大数据工程专业,能准备好相关软件,认真上课,按时完成练习;实训机房应安装有Windows7 64位操作系统及以上版本,使用软件:MySQL8(及以上版本)、Hadoop3.3.1、、Hive3.x、sqoop1.4.7、Rochy linux8、DataEase1.8。
三、实训项目(任务)
序号 实训项目(任务)名称 学时 组织形式 作品形式 1 实训一 Linux环境搭建与准备 2 个人实践 实训报告 2 实训二 Hadoop安装与配置(一) 2 个人实践 实训报告 3 实训三 Hadoop安装与配置(二) 2 个人实践 实训报告 4 实训四 hive的安装部署(一) 2 个人实践 实训报告 5 实训五 hive的安装部署(二) 2 个人实践 实训报告 6 实训六 DDL数据定义 2 个人实践 实训报告 7 实训七 DML数据操作 2 个人实践 实训报告 8 实训八 查询操作 2 个人实践 实训报告 9 实训九 分区表和分桶表 2 个人实践 实训报告 10 实训十 函数的使用 2 个人实践 实训报告 11 实训十一 hive sql综合训练(一) 2 个人实践 实训报告 12 实训十二 hive sql综合训练(二) 2 个人实践 实训报告 13 实训十三 教育大数据分析平台(一) 2 个人实践 实训报告 14 实训十四 教育大数据分析平台(二) 2 个人实践 实训报告 15 实训十五 教育大数据分析平台(三) 2 个人实践 实训报告 16 / / / / 17 / / / / 18 / / / / 19 / / / / 填写说明:① 组织形式:可选择个人实践、小组合作、项目竞赛等;② 作品形式:实训报告、实物制作、方案、源代码等。
四、评价参考标准
评分标准 90-100分 80-89分 70-79分 60-69分 <60 到训情况(25%) 遵守纪律,无迟到早退,到课率95%以上。 遵守纪律,迟到早退次数1-2次,到课率93%以上。 遵守纪律,迟到早退次数不超过3次,到课率90%以上。 基本上能遵守纪律,迟到早退次数不超过5次,到课率80%以上。 不遵守纪律,实习态度差,经常迟到或早退,到课率不足50%。 实训表现(25%) 态度良好,表现积极,学以致用,分析解决问题的思路清晰正确。 态度较好,表现比较积极,能学以致用,分析解决问题的思路基本清晰正确。 态度较好,表现一般,分析解决问题的思路能力一般。 态度尚可,表现一般,分析解决问题的思路能力尚不足。 态度不好,表现较差,不能按规定完成任务操作。 完成提交的作品(50%) 按时完成,要素齐全,步骤完整,形式美观,思路正确,无差错。 按时完成,要素较齐全,步骤较完整,形式尚可,思路无误,无明显错误。 按时完成,要素基本齐全,步骤缺失较少,形式正常,思路一般,错误较少。 基本能按时完成,要素有缺失,步骤需补充,形式尚可,思维能力有待提高。 不能按时完成,要素缺失,步骤不完善,形式不达标,思路混乱,错误较多。
实训一 Linux环境搭建与准备
一、实训目的
1.1 掌握VMware workstation的安装方法
1.2 创建虚拟机
1.3 掌握 rochy linux8的安装方法
1.4 掌握linux常用设置的方法
二、实训内容
2.1 VMware Workstation 安装部署
VMware Workstation 安装步骤:
(1)双击运行安装包程序双击运行安装包,弹出图1-1的安装界面,点击下一步。
图1-1 双击运行安装包程序
(2)弹出图1-2所示界面勾选“我接受许可协议中的条款”,点击下一步按钮。
图1-2 接受许可证协议
(3)弹出图1-3界面,选择一个具体的安装位置(建议非中文无空格),选择增强型键盘驱动程序(可不选),点击下一步按钮。
图1-3 选择安装位置
(4)弹出图1-4所示界面,用户可以按照自身使用习惯勾选产品更新和客户体验提升计划,需要可以勾选相应选项,这里我们不勾选,点击下一步按钮。
图1-4 用户体验设置
(5)弹出图1-5界面,勾选“桌面”、“开始菜单程序文件夹” 可以创建相应的快捷方式,然后点击下一步按钮。
图1-5 创建快捷方式
(6)弹出图1-6所示界面,点击安装按钮,程序将开始安装。
图1-6 开始安装
(7)弹出如图1-7所示界面,耐心等待进度条完成,然后点击下一步按钮。
图1-7 等待安装
(8)弹出图1-8所示界面, 输入有效的秘钥,然后点击输入按钮。
图1-8 输入秘钥
(9)弹出图1-9所示界面,点击完成按钮,完成程序的安装。
图1-9 完成安装
2.2创建虚拟机
创建虚拟机步骤:
(1)如图1-10所示,打开VMware工作界面,点击创建新的虚拟机按钮创建新的虚拟机。
图1-10 创建新的虚拟机
(2)弹出图1-11所示界面,选择自定义的类型进行安装,然后点击下一步按钮。
图1-11 选择安装方式
(3)弹出图1-12所示界面,选择虚拟机硬件兼容性,这里我们选择默认即可,不需要做任何修改,直接下一步按钮。
图1-12 选择虚拟机硬件兼容性
(4)弹出如图1-13所示界面,我们选择稍后安装操作系统,点击下一步按钮。
图1-13 选择客户端操作系统安装
(5)弹出图1-14所示界面,我们选择Linux操作系统,版本为Red Hat Enterprise linux8 64位,然后点击下一步按钮。
图1-14 选择客户端操作系统类型
(6)弹出如图1-15所示界面,我们命名虚拟机名称,选择虚拟机文件的存储文字,然后点击下一步按钮。
图1-15 修改虚拟机名称
(7)弹出图1-16所示界面,输入处理器的数量,以及每个处理器的内核数量,我们可以根据实际情况填写,这里我们将处理器数量,以及每个处理器内核数量配置为1,然后点击下一步按钮。
图1-16 处理器配置
(8)弹出图1-17所示界面,进行虚拟机内存分配,我们可以根据机器自身情况分配,这里我们分配4096mb,然后点击下一步按钮。
图1-17 虚拟机内存配置
(9)弹出图1-18网络类型选择,我们选择使用网络地址转换(NAT),然后点击下一步按钮。
图1-18 网络类型选择
(10)弹出图1-19所示界面,进行I/O控制器类型选择,选择推荐即可,点击下一步按钮。
图1-19 10选择I/O控制器类型
(11)弹出图1-20所示界面,选择磁盘类型,选择推荐的即可,然后点击下一步按钮。
图1-20 选择磁盘类型
(12)弹出如图1-21所示界面,我们选择创建新虚拟机磁盘,点击下一步按钮。
图1-21 选择创建新的虚拟磁盘
(13)弹出如图1-22所示界面,指定磁盘容量为40GB,空间分配方式为“将虚拟磁盘拆分为多个文件”,点击下一步。
图1-22 指定磁盘容量
(14)弹出如图1-23所示界面,我们可以指定虚拟机的磁盘文件,这里我们设定文件名为hadoop1.vmdk,点击下一步按钮。
图1-23 指定磁盘文件
(15)弹出如图1-24所示界面,点击完成按钮完成虚拟机的创建。
图1-24 完成创建虚拟机
2.3安装rochy linux8系统
安装rochy linux8系统步骤:
(1)如图1-25所示,打开VMware软件,双击光驱图标,加载rochy linux8的镜像文件。
图1-25 添加Rochy linux8镜像文件
(2)如图1-26所示,点击开启虚拟机按钮启动虚拟机。
图1-26 启动虚拟机
(3)进入如图1-27所示界面,系统进入倒计时,鼠标点进去,键盘上下键可以选择,选择Install Rochy Linux 8.10 ,然后回车即可。
备注:Ctrl+Alt可以实现Windows主机和VM之间窗口的切换。
图1-27 回车安装Rochy linux8
(4)进入如图1-28所示界面进行语言选择,强烈要求选择English。
图1-28 语言选择
(5)完成语言选择后进入如图1-29所示界面,选择系统键盘,这里选择English,然后点击“done”按钮。
图1-29 选择系统键盘
(6)点击时钟按钮进入选择日期和时间选择界面,选择好相应的日期和时间,点击“done”按钮具体操作如图1-30所示。
图1-30 设置日期与时间
(7)点击“software selection”按钮弹出软件选择界面,选择基础环境安装类型,我们选择最小化安装,然后点击“done”按钮,具体操作如图1-31所示。
图1-31 软件安装
(8)点击“installation destination”按钮,进入安装位置选择界面,选择默认磁盘,点击“done”按钮,具体操作如图1-32所示。
图1-32 选择安装位置
(9)点击Kdump按钮,进入Kdump界面取消相应选择,然后点击“done”按钮,这样可以提高内存的使用率,具体操作如图1-33所示。
图1-33 关闭 KDUMP
(10)点击“network&host name”按钮可以配置网络和主机名配置完成后,点击“done”按钮,具体操作如图1-34所示。
图1-34 配置网络与主机名
(12)点击“root password”按钮,配置root账号密码,这里我们配置为123456,最后点击“done”按钮,。具体操作如图1-35所示。
图1-35 配置root账号密码
(11)仔细检查所有配置确定无误后,点击开始安装按钮,具体操作如图1-36所示。
图1-36 检查所有配置开始安装
(13)如图1-37所示,Rochy linux8开始安装,我们耐心等待进度条完成。
图1-37 等待系统安装
(14)如图1-38所示,安装完成后,点击Reboot System按钮重启虚拟机。
图1-38 安装完成,重启虚拟机
(15)如图1-39所示,系统进入到登录界面,输入密码完成登录。
图1-39 登录Rochy linux8系统
至此,Rochy linux8系统已经完整完毕,可以开始使用了。
2.4 linux统一设置
2.4.1配置静态IP
在实际应用中,由于我们使用的是DHCP(Dynamic Host Configuration Protocol:动态主机配置协议)服务器来分配的地址,那么每次重启DHCP服务器ip地址有可能是会变动的。 而我们用Linux来搭建集群学习Hadoop的话,是希望IP固定不变的,因为有很多地方会涉及到IP地址的配置,如果IP地址变化就会涉及到很多相关地方的修改,所以我们需要配置静态IP,那么具体如何进行配置呢?
(1)如图1-40所示,在vmware中软件点击编辑-虚拟网络编辑器可以查看当前虚拟的网络信息。
1-40查看网络信息
(2)在命令行输入vi /etc/sysconfig/network-scripts/ifcfg-ens160 命令可以配置网卡信息,具体操作与配置如图1-41所示。
1-41 配置静态ip
(3)网络信息配置后,需要重启网络服务,如图1-42所示使用命令systemctl restart NetworkManager。
图1-42 重启网络服务
网络服务重启后,我们需要重启虚拟机,如图1-43所示,输入reboot命令进行重启。
1-43 重启虚拟机
(5)重启后,我要检查一下虚拟机是否能够联网,如图1-44所示Ping www.baidu.com,ping一下百度的网址,如果收到回复表示网络联通。
1-44检查网络
2.4.2 x-shell连接工具
由于直接在Linux虚拟机上操作比较不方便,所以我们选择使用第三方远程连接工具X-shell远程连接到Linux虚拟机,然后通过X-shell对Linux虚拟机进行相关操作。
(1)如图1-45所示,通过360应用商店中进行x-shell工具的安装。
1-45 下载安装X-Shell远程连接工具
(2)如图1-46 所示,打开X-Shell工具,点击file——>new——>connection,配置连接。
1-46 设置连接
(3)选择Authentication,配置用户名和密码,具体操作如图1-47所示。
1-47 设置账号密码
(4)在Sessions对话框选中刚刚创建的会话名称(hadoop1),弹出对话框时我们选择接受并保存,具体操作如图1-48所示。
1-48启动会话
2.4.3 FileZilla传输工具
FileZilla是一个免费开源的FTP软件,可以轻松实现文件上传与下载。
(1)如图1-49所示,在360应用商店,搜索FileZilla,我们可以下载安装FileZilla。
图1-49 安装filezilla
(2)如图1-50所示,在FileZilla中点击文件-站点管理,然后新建站点,进行配置后,点击连接,在弹出的对话框选择“accept and save”按钮。
图1-50 filezilla连接虚拟机
2.4.4 配置主机名和IP映射
实际上无论是 IP 地址还是主机名都是为了标识一台主机或者服务器。IP地址就是一台主机上网时IP协议分配给它的一个逻辑地址,主机名(hostname)就相当于又给这台机器取了一个名字,可以为主机取各种各样的名字。如果要用这个名字去访问这台主机,那么就需要配置hostname与IP地址之间的对应关系。具体操作如图1-51所示。
图1-51 配置主机名和ip映射
2.4.5关闭Linux防火墙
防火墙是对服务器进行保护的一种服务,但是有时候这种服务会带来很大的麻烦。比如它会妨碍集群间的相互通信,所以就需要关闭防火墙。
我们首先使用systemctl status firewalld命令查看防火墙状态,具体操作如图1-52所示。
图1-52 查看防火墙状态
关闭防火墙需要两步,首先使用systemctl stop firewalld命令停止防火墙,然后使用systemctl disable firewalld命令使防火墙失效,具体操作如图1-53所示。
图1-53 关闭防火墙
2.4.6创建Linux用户和用户组
在Hadoop平台搭建过程中,为了系统安全考虑,一般不直接使用超级用户 root,而是需要创建一个新的用户和用户组。我们使用useradd hadoop命令添加hadoop用户,使用passwd hadoop命令为Hadoop用户配置密码(配置密码:123456),具体操作如图1-54所示。
图1-54 创建hadoop用户和用户组
2.4.7 Linux SSH免密登录
SSH(Secure Shell)是可以在应用程序中提供安全通信的一个协议,通过SSH可以安全地进行网络数据传输,它的主要原理就是利用非对称加密体系,对所有待传输的数据进行加密,保证数据在传输时不被恶意破坏、泄露或者篡改。
但是Hadoop集群使用SSH不是用来进行数据传输的,而是在Hadoop集群启动和停止的时候,主节点需要通过SSH协议启动或停止从节点上面的进程。如果不配置SSH免密登录,对Hadoop集群的正常使用没有任何影响,但是在启动和停止Hadoop集群的时候,需要输入每个从节点的密码。可以想象一下,当集群规模比较大的时候,比如达到成百上千节点的规模,如果每次都要分别输入集群节点的密码,这种方法肯定是不可取的,所以要对Hadoop集群进行SSH免密登录的配置。
(1)如图1-55所示,进入hadoop用户的根目录,使用ssh-keygen -t rsa命令生成密钥对。
图1-55 生成密钥对
(2)如图1-56所示, 使用cd .ssh/进入.ssh目录,然后使用 cp id_rsa.pub authorized_keys命令将公钥文件id_rsa.pub 中的内容拷贝到相同目录下的authorized_keys文件中。
图1-56拷贝公钥文件
(3)如图1-57所示,切换到hadoop用户的根目录,然后为使用chmod 700 .ssh 以及chmod 600 .ssh/*命令分别为.shh目录,以及其子目录文件赋予相应的权限。
图1-57为.ssh目录及文件赋予相应的权限
(4)如图1-58所示,在命令行输入ssh hadoop1登录hadoop1,第一次登录需要输入yes进行确认,第二次以后登录则不需要,此时表明设置成功。
图1-58使用ssh命令登录hadoop1
2.4.8 JDK安装与配置
由于Hadoop框架是由Java语言开发并运行在JVM之上,所以需要在Linux中提前安装JDK环境。另外,安装Hadoop对JDK版本也有要求,由于安装的Linux系统是64位的Rochy linux8系统,所以需要安装与之相对应的64位JDK安装包。针对Linux系统下的JDK具体版本,可以选择目前比较稳定且常用的JDK1.8版本。
安装tar解压工具
[root@hadoop1 ~]# yum install tar -y
(2)下载对应版本的jdk-8u141-linux-x64.tar.gz安装包,并上传至hadoop1节点的/home/hadoop/app目录下,JDK安装包所在目录如下所示:
[hadoop@hadoop1 app]$ ls
jdk-8u141-linux-x64.tar.gz
(3)在当前目录下,使用tar命令对JDK进行解压,具体操作如下所示:
[hadoop@hadoop1 app]$ tar -zxvf jdk-8u141-linux-x64.tar.gz
为了方便管理多版本JDK,使用ln命令创建JDK软连接,具体操作如下所示。
[hadoop@hadoop1 app]$ ln -s jdk1.8.0_141 jdk
(4)在hadoop用户下,使用vi命令打开.bashrc配置文件,配置JDK环境变量,具体添加内容如下所示:
[hadoop@hadoop1 app]$ vi ~/.bashrc
JAVA_HOME=/home/hadoop/app/jdk
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
使用source命令执行.bashrc文件,JDK环境变量才能生效,具体操作如下所示。
[hadoop@hadoop1 app]$ source ~/.bashrc
[hadoop@hadoop1 app]$ echo $JAVA_HOME
/home/hadoop/app/jdk
(4)在hadoop用户下,使用Java命令查看JDK版本号,查看表示jdk安装成功,具体操作如下所示。
[hadoop@hadoop1 app]$ java -version
java version "1.8.0_141"
Java(TM) SE Runtime Environment (build 1.8.0_141-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)
如果打印的信息能查看到JDK版本号,说明JDK安装成功。
实训二 Hadoop安装与配置(一)
一、实验目的
1.1 掌握伪分布安装与配置的的方法
1.2 掌握Hadoop完全分布式环境搭建准备
二、实验内容
(1)Hadoop下载与解压
1)下载对应版本的Hadoop安装包,并上传至hadoop1节点的/home/hadoop/app目录下,安装包所在目录如下所示:
[hadoop@hadoop1 app]$ ls
hadoop-3.3.1.tar.gz
2)在当前目录下,使用tar 命令解压Hadoop安装包,具体操作如下所示:
[hadoop@hadoop1 app]$ tar -zxvf hadoop-3.3.1.tar.gz
3)为了方便管理多版本Hadoop,使用ln命令创建软连接,具体操作如下所示:
[hadoop@hadoop1 app]$ ln -s hadoop-3.3.1 hadoop
(2)配置Hadoop
在Hadoop安装目录下进入到etc/hadoop目录,修改Hadoop相关配置文件。
1)修改core-site.xml配置文件。
core-site.xml文件主要配置Hadoop的公有属性,具体配置内容如下所示。
[hadoop@hadoop1 hadoop]$ vi core-site.xml
fs.defaultFS
hdfs://hadoop1:9000
hadoop.tmp.dir
/home/hadoop/data/tmp
2)修改hdfs-site.xml 配置文件。
hdfs-site.xml文件主要配置跟HDFS相关的属性,具体配置内容如下所示。
[hadoop@hadoop1 hadoop]$ vi hdfs-site.xml
dfs.namenode.name.dir
/home/hadoop/data/dfs/name
dfs.datanode.data.dir
/home/hadoop/data/dfs/data
dfs.replication
1
dfs.permissions
false
3)修改hadoop-env.sh配置文件。hadoop-env.sh文件主要配置跟hadoop环境相关的变量,这里主要修改JAVA_HOME的安装目录,具体配置内容如下所示。
[hadoop@hadoop1 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/home/hadoop/app/jdk
4)修改mapred-site.xml配置文件。mapred-site.xml 文件主要配置跟MapReduce 相关的属性,这里主要将MapReduce的运行框架名称配置为YARN,具体配置内容如下所示。
[hadoop@hadoop1 hadoop]$ vi mapred-site.xml
mapreduce.framework.name
yarn
yarn.app.mapreduce.am.env
HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop
mapreduce.map.env
HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop
mapreduce.reduce.env
HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop
5)修改 yarn-site.xml配置文件。
yarn-site.xml文件主要配置跟YARN 相关的属性,具体配置内容如下所示。
[hadoop@hadoop1 hadoop]$ vi yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
6)修改workers配置文件。slaves文件主要配置哪些节点为datanode角色,由于目前搭建的是Hadoop伪分布集群,所以只需要填写当前主机的hostname即可,具体配置内容如下所示。
[hadoop@hadoop1 hadoop]$ vi workers
hadoop1
7)配置Hadoop环境变量。在hadoop用户下,添加Hadoop环境变量,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ vi ~/.bashrc
JAVA_HOME=/home/hadoop/app/jdk
HADOOP_HOME=/home/hadoop/app/hadoop
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH HADOOP_HOME
使用source命令执行.bashrc文件,才能使Hadoop环境变量生效,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ source ~/.bashrc
[hadoop@hadoop1 hadoop]$ hadoop version
Hadoop 3.3.1
8)创建Hadoop相关数据目录。在hadoop用户下,创建Hadoop相关数据目录,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/tmp
[hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/dfs/name
[hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/dfs/data
(3)启动Hadoop伪分布集群
1)格式化主节点namenode。在Hadoop安装目录下,使用如下命令对NameNode进行格式化。
[hadoop@hadoop1 hadoop]$ bin/hdfs namenode -format
注意:第一次安装Hadoop集群需要对NameNode进行格式化,Hadoop集群安装成功之后,下次只需要使用脚本start-all.sh一键启动Hadoop集群即可。
2)启动Hadoop伪分布集群。在Hadoop安装目录下,使用脚本一键启动Hadoop集群,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ sbin/start-all.sh
3)查看Hadoop服务进程。通过jps命令查看Hadoop伪分布集群的服务进程,具体操作如下所示。
[hadoop@hadoop1 ~]$ jps
10885 NodeManager
10327 DataNode
10522 SecondaryNameNode
10746 ResourceManager
10171 NameNode
11247 Jps
如果服务进程中包含Resourcemanager、Nodemanager、NameNode、DataNode和SecondaryNameNode等5个进程,这就说明Hadoop伪分布集群启动成功。
4)查看HDFS文件系统。在浏览器中输入http://hadoop1:9870/地址,通过web界面查看HDFS文件系统,具体操作如图1-1示。
图1-1通过web界面查看HDFS文件系统
备注:在windows平台要用hadoop1访问,必须在C:\Windows\System32\drivers\etc\hosts文件中配置,如图1-2所示。
图1-2在hosts文件中配置ip映射
5)查看YARN资源管理系统。在浏览器中输入http://hadoop1:8088/地址,通过web界面查看YARN资源管理系统,具体操作如图1-3所示。
图1-3通过web界面查看YARN资源管理系统
(4)测试运行Hadoop伪分布集群
Hadoop伪分布集群启动之后,我们以Hadoop自带的WordCount案例来检测Hadoop集群环境的可用性。
1)查看HDFS目录。在HDFS shell中,使用ls命令查看HDFS文件系统目录,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -ls /
由于是第一次使用HDFS文件系统,所以HDFS中目前没有任何目录和文件。
2)创建HDFS目录。在HDFS shell中,使用mkdir命令创建HDFS文件目录/test,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -mkdir /test
3)准备测试数据集。在Hadoop根目录下,新建words.log文件并输入测试数据,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ vi words.log
hadoop hadoop hadoop
spark spark spark
flink flink flink
4)测试数据上传至HDFS。使用put命令将words.log文件上传至HDFS的/test目录下,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -put words.log /test
5)运行WordCount案例。使用yarn脚本将Hadoop自带的WordCount程序提交到YARN集群运行,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /test/words.log /test/out
6)查看作业运行状态。在浏览器中输入http://hadoop1:8088/地址,通过web界面查看YARN中作业运行状态,具体操作如图1-4所示。
图1-4通过web界面查看YARN中作业运行状态
如果在YARN 集群的Web界面中,查看到WordCount作业最终的运行状态为SUCCESS,就说明MapReduce程序可以在YARN集群上成功运行。
7)查询作业运行结果。使用cat命令查看WordCount作业输出结果,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -cat /test/out/*
flink 3
hadoop 3
spark 3
如果WordCount运行结果符合预期值,说明Hadoop伪分布式集群已经搭建成功!
2.2 Hadoop完全分布式环境搭建准备
2.2.1 Linux虚拟机克隆
Linux虚拟机克隆操作步骤如下:
(1)如图1-5所示,在VMware中右键点击hadoop1节点,然后选择hadoop1——>管理——>克隆,进入克隆虚拟机向导,点击“下一页”。
图1-5 克隆虚拟机向导
(2)弹出如果1-6所示的克隆源页面,选择“虚拟机中的当前状态”然后点击“下一步”。
图1-6 选择克隆源
(3)弹出如图1-7所示的克隆类型界面,选择“创建见完整克隆”选项,然后点击“下一步”。
图1-7 选择克隆类型
(4)弹出如图1-8所示的界面,我们可以输入虚拟机的名称以及存储位置,然后点击“完成”按钮。
图1-8 输入新虚拟机的名称
(5)弹出如图1-9的克隆进度界面,耐心等待虚拟机克隆进度条完成。
图1-9克隆虚拟机
(6)如图1-10所示,点击“关闭”按钮,完成虚拟机的克隆。
图1-10 完成虚拟机克隆
(7)如图1-11所示,使用与hadoop1相同的账号密码登录hadoop2(用户名:root 密码:123456)。
图1-11 启动登录
2.2.2 网络及工具配置
(1)配置静态IP
配置静态IP步骤如下:
1)如图1-12所示,在命令行输入:vi/etc/sysconfig/network-scripts/ifcfg-ens33命令。
图1-12 配置静态ip(1)
2)如图1-13所示,修改ip地址为192.168.249.162(可根据实际情况配置)。
图1-13 配置静态ip(2)
3)如图1-14所示,使用systemctl restart NetworkManager重启网络服务。
图1-14 重启网络服务
(4)如图1-15所示,输入ping www.baidu.com命令,测试虚拟机是否能够联网,收到回复表示能够联通。
图1-15 测试网络
(2) Xshell连接
Xshell连接步骤如下:
1)如图1-16所示,静态IP地址配置成功之后,可以通过xshell连接克隆之后的虚拟机,在xshell中新建会话,配置好需要连接的虚拟机。
图1-16 配置连接
2)如图1-17所示,然后配置用户身份验证,输入用户名和密码。
图1-17 配置用户身份验证
3)连接配置好的虚拟机,出现图1-18表示连接成功。
图1-18 通过xshell连接
(3) 修改主机名
修改主机名步骤如下:
1)由于是克隆的,主机还是hadoop1,我们需要修改为hadoop2,使用命令vi /etc/hostname修改主机名,具体操作如图1-19所示。
图1-19 修改主机名
2)为了使用主机名进行访问,我们需要配置主机名映射,输入命令vi /etc/hosts配置主机名映射,具体操作如图1-20所示。
图1-20 修改主机名映射
(3)关闭防火墙
关闭防火墙步骤如下:
1)如图1-21所示,使用查看systemctl status firewalld防火墙状态,如果处于“running”状态表示防火墙开启。
图1-21 查看防火墙状态
2)关闭防火墙分两步进行,首先使用命令systemctl stop firewalld停止防火墙,然后使用命令systemctl disable firewalld使防火墙失效,具体操作如图1-22所示。
图1-22 关闭防火墙
注意:由于克隆hadoop1,前面已经关闭防火墙此步骤可以省略,jdk安装也可省略。
(4) FileZilla连接
在FileZilla中新建站点,进行配置,具体操作如图1-23所示。
图1-23 FileZilla连接虚拟机
备注:使用同样步骤克隆hadoop3并配置ip(ip:192.168.249.163)。
(5)配置Hosts文件
1)使用命令vi /etc/hosts配置ip地址映射,具体操作如图1-24所示,(备注:hadoop1、hadoop2、hadoop3节点hosts文件配置一样)。
图1-24 配置Hosts文件
2)测试hadoop1节点访问hadoop2节点,具体操作如图1-25所示。
图1-25 测试节点互访
2.2.3 时钟同步
(1)我们使用命令timedatectl set-timezone "Asia/Shanghai"统一时区为上海时区,具体操作如图1-26所示。
图1-26 统一时区
(2)使用yum -y install chrony命令下载安装 chrony服务,中间遇到提问请输入y,具体操作如图1-27所示。
图1-27 下载安装 chrony
(3)编辑 chrony 配置文件
vi /etc/chrony.conf
1. 注释掉:
# pool 2.centos.pool.ntp.org iburst
2. 加入新的的时间服务器(可添加多个时间服务器):
server ntp.aliyun.com iburst
图1-28 同步时间
(4)重启 chronyd 服务
systemctl restart chronyd
(5)设置 chronyd 开机自启
systemctl enable chronyd
(6)进行时间同步
chronyc makestep
(7)查看时间是否同步
date
为了能够周期性执行时钟同步,我们需要加入定时计划任务,如需要每隔10分钟同步一下时钟,使用crontab -e命令,输入如下内容:
0-59/10 * * * * /usr/bin/chronyc makestep
具体操作如图1-29所示。
图1-29 加入定时任务
备注:3个节点执行一遍。
2.2.4 集群SSH免密登录
(1)各个节点SSH免密登录。SSH(Secure Shell)是可以在应用程序中提供安全通信的一个协议,通过SSH可以安全地进行网络数据传输,它的主要原理就是利用非对称加密体系,对所有待传输的数据进行加密,保证数据在传输时不被恶意破坏、泄露或者篡改。
但是Hadoop集群使用SSH不是用来进行数据传输的,而是在Hadoop集群启动和停止的时候,主节点需要通过SSH协议启动或停止从节点上面的进程。如果不配置SSH免密码免密登录,对Hadoop集群的正常使用没有任何影响,但是在启动和停止Hadoop集群的时候,需要输入每个从节点的密码。可以想象一下,当集群规模比较大的时候,比如达到成百上千节点的规模,如果每次都要分别输入集群节点的密码,这种方法肯定是不可取的,所以要对Hadoop集群进行SSH免密码免密登录的配置。
SSH免密码免密登录的功能跟用户密切相关,为哪个用户配置了SSH,那个用户就具有SSH免密码免密登录的功能,没有配置的用户则不具备该功能,这里选择为hadoop用户配置SSH免密码免密登录。
首先在控制台,使用su命令切换到hadoop用户的根目录,然后使用ssh-keygen -t rsa命令(ssh-keygen是秘钥生成器,-t 是一个参数,rsa 是一种加密算法)生成秘钥对(即公钥文件id_rsa.pub和私钥文件id_rsa)。
由于hadoop1先前已经配置过免密登录,我们直接从hadoop2开始配置(注意是在hadoop用户)配置hadoop2节点免密登录的步骤如下,首先使用su - hadoop命令切换至hadoop用户,然后使用rm -rf .ssh/删除克隆过来的ssh目录,最后通过ssh-keygen -t rsa生成秘钥,具体操作如图1-30所示。
图1-30 生成秘钥
(2)将公钥文件id_rsa.pub 中的内容拷贝到相同目录下的authorized_keys文件中。使用cd .ssh/ 进入ssh目录,使用cp id_rsa.pub authorized_keys复制秘钥到authorized_keys文件,最后通过cat authorized_keys查看秘钥是否复制成功,具体操作如图1-31。
图1-31 拷贝公钥到authorized_keys文件中
(3)切换到hadoop用户的根目录,然后为.ssh目录及文件赋予相应的权限。具体操作如图1-32所示。
图1-32 为.ssh目录及文件赋予相应的权限
(4)使用ssh命令登录hadoop2,第一次登录需要输入yes进行确认,第二次以后登录则不需要,此时表明设置成功,具体操作如图1-33所示。
图1-33 使用ssh登录hadoop2
(5)hadoop3节点按照hadoop2节点一样配置SSH免密登录即可。
(6)配置集群SSH免密登录。为了实现集群节点之间SSH免密登录,我们还需要将hadoop2和hadoop3的公钥id_ras.pub复制到hadoop1中的authorized_keys文件中,具体操作以及命令如图1-24、图1-35所示。
[hadoop@hadoop2 ~]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop1 'cat >> ~/.ssh/authorized_keys'
图1-34 配置集群SSH免密登录(1)
[hadoop@hadoop3 ~]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop1 'cat >> ~/.ssh/authorized_keys'
图1-35 配置集群SSH免密登录(2)
然后将hadoop1中的authorized_keys文件分发到hadoop2和hadoop3节点,具体操作如图1-36、图1-37所示:
[hadoop@hadoop1 .ssh]$ scp -r authorized_keys hadoop@hadoop2:~/.ssh
图1-36 authorized_keys文件分发到hadoop2
[hadoop@hadoop1 .ssh]$ scp -r authorized_keys hadoop@hadoop3:~/.ssh/
图1-37 authorized_keys文件分发到hadoop3
然后hadoop1节点就可以免密登录hadoop2和hadoop3节点,如图1-38所示。
图1-38 免密登录hadoop2、hadoop3
2.2.5 集群脚本开发
(1)创建tools目录,并准备脚本与配置文件。
(2)首先使用mkdir tools命令创建tools目录,并用ls命令查看,具体操作如图1-39所示。
图1-39 创建tools目录
(3)通过FileZilla上传脚本文件到tools文件夹并使用ls命令查看,具体操作如图1-40、图1-41所示。
图1-40 上传脚本文件
图1-41 查看脚本文件
(4)然后使用vi deploy.conf配置脚本,具体内容为:
hadoop1,master,all,
hadoop2,slave,all,
hadoop3,slave,all,
具体操作如图1-42所示。
图1-42 配置脚本文件
(5)使用 chmod u+x deploy.sh runRemoteCmd.sh命令给脚本授予可执行权限并使用ls命令查看,具体操作如图1-43所示。
图1-43 给脚本授予可执行权限
(6)使用vi ~/.bashrc命令配置脚本环境变量,具体操作如图1-44所示。
图1-44 配置脚本环境变量(1)
(7)将内容修改为,如图1-45的内容。
图1-45 配置脚本环境变量(2)
(8)使用source ~/.bashrc 使配置生效,具体操作如图1-46所示。
图1-46 配置生效
(9)最后测试运行集群脚本,使用touch words.log创建words.log文件,然后使用deploy.sh words.log /home/hadoop/app slave命令分发文件到hadoop2、hadoop3,具体操作如图1-47所示。
图1-47 测试运行集群脚本
实训三 Hadoop安装与配置(二)
一、实验目的
1.1 掌握搭建zookeeper集群的方法
1.2 掌握搭建完全分布式Hadoop集群的方法
二、实验内容
2.1搭建zookeeper集群
(1)下载并解压zookeeper
到官网(地址:http://Zookeeper.apache.org/releases.html# download)下载Zookeeper稳定版本的apache-zookeeper-3.8.4-bin.tar.gz安装包,然后上传至hadoop1 节点的/home/hadoop/app目录下并解压,具体操作如下所示。
#解压Zookeeper
[hadoop@hadoop1 app]$ tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz
#创建Zookeeper软连接
[hadoop@hadoop1 app]$ ln -s apache-zookeeper-3.8.4-bin zookeeper
(2)修改zoo.cfg配置文件
在运行 Zookeeper 服务之前,需要新建一个配置文件。这个配置文件习惯上命名为zoo.cfg,并保存在conf子目录中,其核心内容如下所示。
[hadoop@hadoop1 app]$ cd zookeeper
[hadoop@hadoop1 zookeeper]$ cd conf/
[hadoop@hadoop1 conf]$ ls
configuration.xsl logback.xml zoo_sample.cfg
[hadoop@hadoop1 conf]$ cp zoo_sample.cfg zoo.cfg
[hadoop@hadoop1 conf]$ vi zoo.cfg
#数据目录需要提前创建
dataDir=/home/hadoop/data/zookeeper/zkdata
#日志目录需要提前创建
dataLogDir=/home/hadoop/data/zookeeper/zkdatalog
#访问端口号
clientPort=2181
#server.每个节点服务编号=服务器ip地址:集群通信端口:选举端口
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888
具体操作步骤如图1-1所示。
图1-1 修改zoo.cfg配置文件
(3)同步zookeeper安装目录
使用scp命令将hadoop1节点的Zookeeper安装目录,整体同步到集群的hadoop2和hadoop3节点,具体操作如下所示。
方法1:使用远程拷贝命令scp,操作步骤如下。
[hadoop@hadoop1 app]$scp -r zookeeper-3.4.6 hadoop@hadoop2:/home/hadoop/app/
[hadoop@hadoop1 app]$scp -r zookeeper-3.4.6 hadoop@hadoop3:/home/hadoop/app/
方法2:使用集群脚本,操作步骤如下。
[hadoop@hadoop1 app]$ deploy.sh apache-zookeeper-3.8.4-bin /home/hadoop/app/ slave
然后分别在hadoop2和hadoop3节点上创建Zookeeper软连接,具体操作如下所示。
[hadoop@hadoop2 app]$ ln -s apache-zookeeper-3.8.4-bin zookeeper
[hadoop@hadoop3 app]$ ln -s apache-zookeeper-3.8.4-bin zookeeper
(4)创建数据和日志目录
在集群各个节点创建Zookeeper数据目录和日志目录,需要跟zoo.cfg配置文件保持一致,具体操作如下所示。
#创建Zookeeper数据目录
方法1:三个节点分别创建。
[hadoop@hadoop1 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata
[hadoop@hadoop2 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata
[hadoop@hadoop3 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata
方法2:使用集群脚本。
[hadoop@hadoop1 ~]$ runRemoteCmd.sh 'mkdir -p /home/hadoop/data/zookeeper/zkdata' all
执行效果如图1-2所示。
图1-2 创建zkdata目录
#创建Zookeeper日志目录
方法1:
[hadoop@hadoop1 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog
[hadoop@hadoop2 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog
[hadoop@hadoop3 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog
方法2:(必须安装配置相应脚本工具)
[hadoop@hadoop1 ~]$ runRemoteCmd.sh 'mkdir -p /home/hadoop/data/zookeeper/zkdatalog' all
执行效果如图1-3所示。
图1-3 创建zkdatalog目录
(5)创建各节点服务编号
分别在Zookeeper集群各个节点,进入/home/hadoop/data/zookeeper/zkdata目录,创建文件myid,然后分别输入服务编号,具体操作如下所示:
#hadoop1节点
[hadoop@hadoop1 zkdata]$ touch myid
[hadoop@hadoop1 zkdata]$ echo 1 > myid
#hadoop2节点
[hadoop@hadoop2 zkdata]$ touch myid
[hadoop@hadoop2 zkdata]$ echo 2 > myid
#hadoop3节点
[hadoop@hadoop3 zkdata]$ touch myid
[hadoop@hadoop3 zkdata]$ echo 3 > myid
注意:每个节点服务编号的值是一个整形数字且不能重复。
(6)启动Zookeeper集群服务
1)在集群各个节点分别进入Zookeeper安装目录,然后使用如下命令启动Zookeeper服务。
方法1:
[hadoop@hadoop1 zookeeper]$ bin/zkServer.sh start
[hadoop@hadoop2 zookeeper]$ bin/zkServer.sh start
[hadoop@hadoop3 zookeeper]$ bin/zkServer.sh start
方法2:
[hadoop@hadoop1 ~]$ runRemoteCmd.sh '/home/hadoop/app/zookeeper/bin/zkServer.sh start' all
执行效果如图1-4所示。
图1-4 启动zookeeper集群
2)Zookeeper集群启动一会之后,通过如下命令查看Zookeeper集群状态。
方法1:
[hadoop@hadoop:1 zookeeper]$ bin/zkServer.sh status
[hadoop@hadoop2 zookeeper]$ bin/zkServer.sh status
[hadoop@hadoop3 zookeeper]$ bin/zkServer.sh status
方法2:
[hadoop@hadoop1 ~]$ runRemoteCmd.sh '/home/hadoop/app/zookeeper/bin/zkServer.sh status' all
执行效果如图1-5所示。
图1-5 查看zookeeper集群状态
如果在Zookeeper集群中,其中一个节点为leader领导者,另外两个节点是follower跟随者,说明Zookeeper集群安装部署成功。
2.2搭建完全分布式Hadoop集群
2.2.1 HDFS集训搭建
(1)下载解压Hadoop
首先到官网(地址:https://archive.apache.org/dist/hadoop/common/)下载Hadoop稳定版本的安装包,然后上传至hadoop1节点下的/home/hadoop/app目录下并解压,具体操作如下所示。
[hadoop@hadoop1 app]$ tar -zxvf hadoop-3.3.1.tar.gz //解压
[hadoop@hadoop1 app]$ ln -s hadoop-3.3.1 hadoop //创建软连接
[hadoop@hadoop1 app]$ cd /home/hadoop/app/hadoop/etc/hadoop/ //切换到配置目录
(2)修改HDFS配置文件
1)修改hadoop-env.sh配置文件。hadoop-env.sh文件主要配置跟hadoop环境相关的变量,这里主要修改JAVA_HOME的安装目录,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/home/hadoop/app/jdk
2)修改core-site.xml配置文件。core-site.xml文件主要配置hadoop的公有属性,具体需要配置的每个属性如下所示。
[hadoop@hadoop1 hadoop]$ vi core-site.xml
fs.defaultFS
hdfs://mycluster
hadoop.tmp.dir
/home/hadoop/data/tmp
ha.zookeeper.quorum
hadoop1:2181,hadoop2:2181,hadoop3:2181
3)修改hdfs-site.xml配置文件。hdfs-site.xml文件主要配置跟HDFS相关的属性,具体需要配置的每个属性如下所示。
[hadoop@hadoop1 hadoop]$ vi hdfs-site.xml
dfs.namenode.name.dir
file:/home/hadoop/data/dfs/name
dfs.datanode.data.dir
file:/home/hadoop/data/dfs/data
dfs.journalnode.edits.dir
/home/hadoop/data/journaldata/jn
dfs.nameservices
mycluster
dfs.ha.namenodes.mycluster
nn1,nn2,nn3
dfs.namenode.rpc-address.mycluster.nn1
hadoop1:8020
dfs.namenode.rpc-address.mycluster.nn2
hadoop2:8020
dfs.namenode.rpc-address.mycluster.nn3
hadoop3:8020
dfs.namenode.http-address.mycluster.nn1
hadoop1:9870
dfs.namenode.http-address.mycluster.nn2
hadoop2:9870
dfs.namenode.http-address.mycluster.nn3
hadoop3:9870
dfs.namenode.shared.edits.dir
qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster
dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
dfs.ha.fencing.ssh.private-key-files
/home/hadoop/.ssh/id_rsa
dfs.ha.automatic-failover.enabled
true
dfs.permissions.enabled
false
4)配置workers文件。workers文件是根据集群规划配置DataNode节点所在的主机名,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ vi workers
hadoop1
hadoop2
hadoop3
5)向所有节点远程复制Hadoop安装目录。在hadoop1节点,切换到/home/hadoop/app目录下,将Hadoop安装目录远程复制到hadoop2和hadoop3节点,具体操作如下两种方法:
方法1:
[hadoop@hadoop1 app]$scp -r hadoop-3.3.1 hadoop@hadoop2:/home/hadoop/app/
[hadoop@hadoop1 app]$scp -r hadoop-3.3.1 hadoop@hadoop3:/home/hadoop/app/
方法2:
[hadoop@hadoop1 hadoop]$ deploy.sh /home/hadoop/app/hadoop-3.3.1 /home/hadoop/app slave
然后在hadoop2和hadoop3节点上分别创建软连接,具体操作如下所示。
[hadoop@hadoop2 app]$ ln -s hadoop-3.3.1 hadoop
[hadoop@hadoop3 app]$ ln -s hadoop-3.3.1 hadoop
备注:复制前删除使用rm -rf hadoop hadoop-3.3.1命令hadoop1、hadoop2上的hadoop hadoop-3.3.1目录
2.2.2 启动HDFS集群服务
(1)启动Zookeeper集群
在集群所有节点分别启动Zookeeper服务,具体操作如下所示。
方法1:分别在三个节点启动。
[hadoop@hadoop1 zookeeper]$ bin/zkServer.sh start
[hadoop@hadoop2 zookeeper]$ bin/zkServer.sh start
[hadoop@hadoop3 zookeeper]$ bin/zkServer.sh start
方法2:使用远程执行脚本。
[hadoop@hadoop1 hadoop]$ runRemoteCmd.sh '/home/hadoop/app/zookeeper/bin/zkServer.sh start ' all
(2)启动Journalnode集群
在集群所有节点分别启动Journalnode服务,具体操作如下所示。
方法1:分别在三个节点启动。
[hadoop@hadoop1 hadoop]$sbin/hadoop-daemon.sh start journalnode
[hadoop@hadoop2 hadoop]$sbin/hadoop-daemon.sh start journalnode
[hadoop@hadoop3 hadoop]$sbin/hadoop-daemon.sh start journalnode
方法2:使用远程执行脚本。
[hadoop@hadoop1 hadoop]$ runRemoteCmd.sh '/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode' all
(3)格式化主节点NameNode
在hadoop1节点(NameNode主节点)上,使用如下命令对NameNode进行格式化。
[hadoop@hadoop1 hadoop]$ bin/hdfs namenode -format / /n amenode 格式化
[hadoop@hadoop1 hadoop]$ bin/hdfs zkfc -formatZK //格式化高可用
[hadoop@hadoop1 hadoop]$bin/hdfs namenode //启动namenode
(4)备用NameNode同步主节点元数据
在hadoop1节点启动NameNode服务的同时,需要在hadoop2,hadoop3节点(NameNode备用节点)上执行如下命令同步主节点的元数据。
[hadoop@hadoop2 hadoop]$ bin/hdfs namenode -bootstrapStandby
[hadoop@hadoop3 hadoop]$ bin/hdfs namenode -bootstrapStandby
(5)关闭Journalnode集群
hadoop2节点同步完主节点元数据之后,紧接着在hadoop1节点上,按下〈Ctrl+C〉组合键来结束NameNode进程,然后关闭所有节点上面的Journalnode进程,具体操作如下所示。
[hadoop@hadoop1 hadoop]$sbin/hadoop-daemon.sh stop journalnode
[hadoop@hadoop2 hadoop]$ sbin/hadoop-daemon.sh stop journalnode
[hadoop@hadoop3 hadoop]$ sbin/hadoop-daemon.sh stop journalnode
(6)一键启动HDFS集群
如果上面操作没有问题,在hadoop1节点上,可以使用脚本一键启动HDFS集群所有相关进程,具体操作下所示。
[hadoop@hadoop1 hadoop]$ sbin/start-dfs.sh
注意:第一次安装HDFS需要对NameNode进行格式化,HDFS集群安装成功之后,以后使用start-dfs.sh脚本一键启动HDFS集群的所有进程即可。
2.2.3 HDFS集群测试
在浏览器中分别输入网址http://hadoop1:9870,以及http://hadoop3:9870通过 Web 界面查看hadoop1、hadoop3节点的NameNode的状态,结果如图1-6所示。该节点的状态为standby,表示HDFS不能通过hadoop1节点的NameNode对外提供服务。
图1-6 standby状态的NameNode界面
在浏览器中输入网址http://hadoop2:9870,通过Web界面查看hadoop2节点的NameNode的状态,结果如图2-54所示。该节点的状态为active,表示hadoop2节点的NameNode可以对外提供服务。
图1-7 active状态的NameNode界面
注意:某一时刻只能有一个NameNode节点处于active状态。
在hadoop1节点的/home/hadoop/app/hadoop目录下创建words.log文件,然后上传至 HDFS文件系统的/test目录下,检查 HDFS是否能正常使用,具体操作如下:
#本地新建words.log文件
[hadoop@hadoop1 hadoop]$ vi words.log
hadoop hadoop hadoop
spark spark spark
flink flink flink
[hadoop@hadoop1 hadoop]$ hdfs dfs -mkdir /test
#上传本地文件words.log
[hadoop@hadoop1 hadoop]$ hdfs dfs -put words.log /test
#查看words.log是否上传成功
[hadoop@hadoop1 hadoop]$ hdfs dfs -ls /test
/test/words.log
如果上面操作没有异常,说明HDFS分布式集群搭建成功。
2.2.4 YARN集群配置
(1)修改 mapred-site.xml配置文件
mapred-site.xml 文件主要配置跟 MapReduce 相关的属性,这里主要将MapReduce的运行环境指定为YARN,核心配置如下所示。
[hadoop@hadoop1 hadoop]$ vi mapred-site.xml
mapreduce.framework.name
yarn
(2)修改 yarn-site.xml配置文件
yarn-site.xml 文件主要配置跟YARN 相关的属性,核心配置如下所示。
[hadoop@hadoop1 hadoop]$ vi yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.cluster-id
cluster-yarn1
yarn.resourcemanager.ha.rm-ids
rm1,rm2,rm3
yarn.resourcemanager.hostname.rm1
hadoop1
yarn.resourcemanager.webapp.address.rm1
hadoop1:8088
yarn.resourcemanager.address.rm1
hadoop1:8032
yarn.resourcemanager.scheduler.address.rm1
hadoop1:8030
yarn.resourcemanager.resource-tracker.address.rm1
hadoop1:8031
yarn.resourcemanager.hostname.rm2
hadoop2
yarn.resourcemanager.webapp.address.rm2
hadoop2:8088
yarn.resourcemanager.address.rm2
hadoop2:8032
yarn.resourcemanager.scheduler.address.rm2
hadoop2:8030
yarn.resourcemanager.resource-tracker.address.rm2
hadoop2:8031
yarn.resourcemanager.hostname.rm3
hadoop3
yarn.resourcemanager.webapp.address.rm3
hadoop3:8088
yarn.resourcemanager.address.rm3
hadoop3:8032
yarn.resourcemanager.scheduler.address.rm3
hadoop3:8030
yarn.resourcemanager.resource-tracker.address.rm3
hadoop3:8031
yarn.resourcemanager.zk-address
hadoop1:2181,hadoop2:2181,hadoop3:2181
yarn.resourcemanager.recovery.enabled
true
yarn.resourcemanager.store.class
org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
yarn.nodemanager.env-whitelist
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLAS
SPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
(3)向所有节点同步YARN配置文件
在hadoop1节点上修改完YARN相关配置之后,将修改的配置文件远程复制到hadoop2节点和hadoop3节点,具体操作如下所示。
#将 mapred-site.xml文件远程复制到hadoop2和hadoop3节点
方法1:
[hadoop@hadoop1 hadoop]$scp -r mapred-site.xml hadoop@hadoop2:/home/hadoop/app/hadoop/etc/hadoop
[hadoop@hadoop1 hadoop]$scp -r mapred-site.xml hadoop@hadoop3:/home/hadoop/app/hadoop/etc/hadoop
方法2:
[hadoop@hadoop1 hadoop]$ deploy.sh mapred-site.xml /home/hadoop/app/hadoop/etc/hadoop/ slave
#将yarn-site.xml文件远程复制到hadoop2和hadoop3节点
方法1:
[hadoop@hadoop1 hadoop]$scp -r yarn-site.xml hadoop@hadoop2:/home/hadoop/app/hadoop/etc/hadoop
[hadoop@hadoop1 hadoop]$scp -r yarn-site.xml hadoop@hadoop3:/home/hadoop/app/hadoop/etc/hadoop
方法2:
[hadoop@hadoop1 hadoop]$ deploy.sh yarn-site.xml /home/hadoop/app/hadoop/etc/hadoop/ slave
2.2.5 启动YARN集群服务
YARN HA的实现依赖于Zookeeper,所以需要优先启动Zookeeper集群。因为前面操作已经启动Zookeeper集群,所以该步骤可以跳过。
启动YARN集群
在hadoop1节点上,使用脚本一键启动YARN集群,具体操作如下所示。
[hadoop@hadoop1 hadoop]$ sbin/start-yarn.sh
2.2.6 YARN集群测试
(1)Web界面查看YARN集群
在浏览器中输入网址http://hadoop1:8088(或者http://hadoop2:8088;http://hadoop3:8088),通过 Web 界面查看YARN集群信息,结果如图1-8所示。
图1-8 Web界面查看YARN集群
(2)YARN集群测试
为了测试YARN集群是否可以正常运行MapReduce程序,我们以Hadoop自带的wordcount示例来进行演示,具体操作如图1-9所示。
[hadoop@hadoop1 hadoop]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /test/words.log /test/out
图1-9 YARN集群运行wordcount
MapReduce作业在YARN集群执行状态结果,如图1-10所示。
图1-10 MapReduce作业运行状态
如果上述操作没有异常,最终作业的状态信息显示为SUCCEEDED,就说明MapReduce程序在YARN集群上面运行成功,从而说明Hadoop分布式集群已经全部搭建成功。
通过命令查询执行结果:
[hadoop@hadoop1 hadoop]$ bin/hdfs dfs -cat /test/out/*
执行结果如图1-11所示。
图1-11MapReduce作业运行结果
实训四 Hive的安装部署(一)
一、实验目的
1.1 掌握搭建hive的方法
二、实验内容
2.1 Hive的安装部署
Hive是一个客户端工具并没有集群的概念,所以Hive的安装部署相对简单。一般情况下,由于Hive的元数据信息存储在第三方数据库中(如MySQL),所以在安装Hive之前需要首先安装MySQL数据库。由于硬件资源有限,我们从Hadoop集群中选择hadoop1节点来安装部署Hive客户端以及MySQL元数据库即可。
2.1.1安装MySQL
MySQL数据库的安装有离线和在线安装两种方式,为了方便起见,我们选择在线安装方式。
(1)在线安装MySQL。在hadoop1节点上,使用yum命令在线安装MySQL数据库,具体操作如下所示。
[root@hadoop1 ~]# yum install mysql-server
(2)启动mysql服务。MySQL数据库安装成功之后,通过命令行启动MySQL服务,具体操作如下所示。
[root@hadoop1 ~]# systemctl start mysqld
[root@hadoop1 ~]# systemctl enable mysqld
(3)设置MySQL root用户密码。MySQL刚刚安装完成,默认root用户是没有密码的,需要登录MySQL设置root用户密码,具体步骤如下。
因为MySQL默认没有密码,所以使用root用户可直接登录MySQL,输入密码时可按Enter键回车即可,具体操作如下所示。
[root@hadoop1 ~]# mysql -u root -p
Enter password:
......
mysql>
在MySQL客户端设置root用户密码,具体操作如下所示。
mysql>alter user'root'@'localhost' identified with mysql_native_password by 'root';
设置完MySQL root用户密码之后,退出并重新登录MySQL,用户名为:root,密码为:root。
[root@hadoop1 ~]# mysql -u root –p
Enter password:
mysql>
如果能成功登录MySQL,就说明MySQL 的root用户密码设置成功。
(4)创建Hive账户。
①首先输入如下命令创建Hive账户,操作命令如下。
mysql>create user 'hive'@'hadoop1' identified by 'hive';
mysql>create user 'hive'@'%' identified by 'hive';
②将MySQL所有权限授予Hive账户,操作命令如下所示。
mysql>GRANT ALL PRIVILEGES ON *.* TO 'hive'@'hadoop1' WITH GRANT OPTION;
③将MySQL所有权限授予Hive账户,并允许所有ip访问。
mysql>GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' WITH GRANT OPTION;
④通过命令使上述授权生效,操作命令如下所示。
mysql> flush privileges;
⑤如果上述操作成功,就可以使用Hive账户登录MySQL数据库,具体命令如下。
[root@hadoop1 ~] mysql -h hadoop1 -u hive -p
⑥创建hive数据库。
mysql> create database hive;
2.1.2安装Hive
Hive的安装比较简单,因为Hive底层存储依赖HDFS,底层计算默认依赖MapReduce,所以我们选择一个节点部署Hive客户端,通过Hive客户端能将Hive 查询任务提交到Hadoop集群运行即可。
1.下载Hive
到官网(http://hive.apache.org/down/oads.html)下载 Hive 安装包apache-hive-3.1.3-bin.tar.gz,然后上传至hadoop1节点的/home/hadoop/app目录下。
2.解压Hive
在hadoop1节点上,使用解压命令解压Hive安装包,具体操作如下所示。
[hadoop@hadoop1 app]$ tar -zxvf apache-hive-3.1.3-bin.tar.gz
然后创建hive软连接,具体操作如下所示。
[hadoop@hadoop1 app]$ ln -s apache-hive-3.1.3-bin hive
3.修改hive-site.xml配置文件
进入hive的conf目录下发现hive-site.xml文件不存在,需要从默认配置文件复制一份,具体操作如下所示。
[hadoop@hadoop1 conf]$ cp hive-default.xml.template hive-site.xml
然后在hive-site.xml配置文件中,修改元数据库相关配置,修改内容如下所示。
[hadoop@hadoop1 conf]$ vi hive-site.xml
#配置连接驱动名为com.mysql.jdbc.Driver
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
i
#修改连接MySQL的URL
javax.jdo.option.ConnectionURL jdbc:mysql://hadoop1:3306/hive?characterEncoding=UTF-8
#修改连接数据库的用户名和密码
javax.jdo.option.ConnectionUserName
hive
javax.jdo.option.ConnectionPassword
hive
4.配置Hive环境变量
打开.bashrc文件,配置Hive环境变量,具体操作如下所示。
[hadoop@hadoop1 conf]$ vi ~/.bashrc
修改为如下内容:
JAVA_HOME=/home/hadoop/app/jdk
HADOOP_HOME=/home/hadoop/app/hadoop
HIVE_HOME=/home/hadoop/app/hive
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:/home/hadoop/tools:$HIVE_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH HADOOP_HOME HIVE_HOME
保存并退出,并用命令source ~/.bashrc使配置文件生效。
5.添加MySQL驱动包
下载mysql-connector-j-8.0.31.jar(地址:http://central.maven.org/maven2/mysql/)驱动包,然后上传至Hive的lib目录下即可。
6.修改Hive相关数据目录
修改hive-site.xml配置文件,更改相关数据目录,具体配置如下所示。
[hadoop@hadoop1 conf]$ vi hive-site.xml
hive.querylog.location
/home/hadoop/app/hive/iotmp
hive.exec.local.scratchdir
/home/hadoop/app/hive/iotmp
hive.downloaded.resources.dir
/home/hadoop/app/hive/iotmp
7.启动Hive服务
第一次启动Hive服务需要先进行初始化,具体操作如下所示。
[hadoop@hadoop1 hive]$ bin/schematool -dbType mysql -initSchema
然后再执行bin/hive脚本启动Hive服务,具体操作如下所示。
[hadoop@hadoop1 hive]$ bin/hive
hive>show databases;
如果上述操作没有问题,则说明Hive客户端已经安装成功。
实训五 Hive的安装部署(二)
一、实验目的
1.1 掌握部署hivesever2服务的方法
1.2掌握使用datagrip图形化客户端远程访问hive的方法
二、实验内容
2.1 hiveserver2服务部署
Hive的hiveserver2服务的作用是提供jdbc/odbc接口,为用户提供远程访问Hive数据的功能,例如用户期望在个人电脑中访问远程服务中的Hive数据,就需要用到Hiveserver2。
在远程访问Hive数据时,客户端并未直接访问Hadoop集群,而是由Hivesever2代理访问。由于Hadoop集群中的数据具备访问权限控制,所以此时需考虑一个问题:那就是访问Hadoop集群的用户身份是谁?是Hiveserver2的启动用户?还是客户端的登录用户?
2.1.1 hiveserver2部署
(1)Hadoop端配置
hivesever2的模拟用户功能,依赖于Hadoop提供的proxy user(代理用户功能),只有Hadoop中的代理用户才能模拟其他用户的身份访问Hadoop集群。因此,需要将hiveserver2的启动用户设置为Hadoop的代理用户,配置方式如下:
修改配置文件core-site.xml,然后记得分发三台机器,重启集群。
[hadoop@hadoop1 ~]$ cd /home/hadoop/app/hadoop/etc/hadoop
[hadoop@hadoop1 hadoop]$ vi core-site.xml
增加如下配置:
hadoop.proxyuser.hadoop.hosts
*
hadoop.proxyuser.hadoop.groups
*
hadoop.proxyuser.hadoop.users
*
(2)Hive端配置
在hive-site.xml文件中添加如下配置信息
[hadoop@hadoop102 conf]$ vim hive-site.xml
hive.server2.thrift.bind.host
hadoop1
hive.server2.thrift.port
10000
2.2使用Datagrip图形化客户端进行远程访问hive
2.2.1下载DataGrip
访问官方网址:https://www.jetbrains.com/datagrip/,效果如下图1-1所示:
图1-1 官方网址
如图1-2所示,点击右上角的Download按钮进入下载界面,可以看到DataGrip支持Windows、macOS、Linux三个系统,有30天的免费试用期,Windows版的PhpStorm包含.exe、.zip、.exe (ARM64)三种版本。
.exe:标准的可执行文件格式,适用 x86 架构的计算机和服务器。Intel和AMD的CPU下载这个版本。
.zip:绿色版,直接解压就能使用。
.exe (ARM64):专为 ARM64 架构设计的可执行文件格式,适用于基于 ARM 架构的设备。
图1-2 下载datagrip
2.2.2安装datagrip
双击下载的datagrip-2024.3.4.exe,进入DataGrip安装界面,点击下一步,效果如图1-3所示:
图1-3 安装欢迎界面
进入选择安装位置界面,默认安装在C:\Program Files\JetBrains\DataGrip 2024.3.3这个目录,可以点击右侧的浏览重新选择安装的目录,然后点击下一步,效果如图1-4所示:
图1-4 选择安装位置
进入安装选项界面,勾选创建桌面快捷方式,点击下一步,效果图1-5所示:
图1-5 勾选桌面快捷方式
进入选择开始菜单目录界面,点击下一步,效果如图1-6所示:
图1-6 选择开始菜单目录
进入安装中界面,等待DataGrip安装,效果如图图1-7所示:
图1-7 安装中界面
DataGrip安装完成后,进入DataGrip 安装程序结束界面,点击完成,效果图1-8所示:
图1-8完成安装
到此就完成了DataGrip的安装。
2.3.3配置DataGrip连接
1)启动hiveserver2
提示:必须先启动hadoop集群
[hadoop@hadoop1 hive]$ bin/hive --service hiveserver2
或者直接使用[hadoop@hadoop1 bin]$ hiveserver2
2)创建连接
如图1-9所示,新建一个hive的数据源。
图1-9 创建连接
3)配置连接属性
如图1-10所示,所有属性配置和Hive的客户端配置一致即可。初次使用,配置过程会提示缺少JDBC驱动,按照提示下载即可。
图1-10 配置连接属性
4)界面介绍
如图1-11所示,为datagrip的操作界面。
图1-11 datagrip操作界面
5)测试sql执行
如图1-12所示,输入sql代码,然后执行。
图1-12测试sql执行
注意:hive-3.1.2启动的时候,默认申请的JVM堆内存大小为256M,JVM堆内存申请太小,导致执行复杂的sql时经常会报错(如下图所示):java.lang.OutOfMemoryError: GC overhead limit exceeded,然后HiveServer2服务就异常了,因此最好调整一下HADOOP_HEAPSIZE这个参数。
解决方案:
进入hive下的conf目录,先把“hive-env.sh.template”拷贝一下,或者“mv”重命名
[hanxiao@hadoop102 conf]$ cp hive-env.sh.template hive-env.sh
然后vim命令修改“hive-env.sh”
[hanxiao@hadoop102 conf]$ vim hive-env.sh
去掉第40行的“#”号(就可以把HADOOP_HEAPSIZE改为1024)
export HADOOP_HEAPSIZE=1024
实训六 DDL数据定义
一、实验目的
1.1 掌握hvie对数据库的操作
1.2 掌握hive对数据表的操作
实验内容
2.1 Hive对数据库的操作
2.1.1创建数据库
Hive安装成功之后会存在一个默认的数据库default,为了方便管理不同业务数据,需要单独创建新的数据库。
(1)语法
创建数据库语法如下:
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
(2)解释
创建数据库子句含义解释如下:
SCHEMA 和 DATABASE:两者含义相同,用途一样。
IF NOT EXISTS:创建数据库时若有同名数据库存在,缺少该子句将抛出错误信息。
COMMENT:表示为数据库添加描述信息。
LOCATION:存放数据库数据目录。
WITH DBPROPERTIES:表示为数据库添加描述信息,如创建时间、作者等信息。
(3)示例
创建名为weather的数据库,具体操作如图1-1所示。
create database if not exists weather comment "天气数据库" location
"/user/hive/warehouse/mydb" with dbproperties ('creator'='hyy','date'='2024-10-09');
图1-1创建weather数据库
通过describe命令查看已建数据库的详情,具体操作如图1-2所示。
describe database extended weather;
图1-2查看weather数据库详情
2.1.2使用数据库
在Hive中可以根据不同的业务创建不同数据库,如果想对某个业务的数据进行操作,首先需要使用或者进入该数据库。
(1)语法
使用数据库的语法如下所示:
USE database_name;
(2)解释
使用数据库子句含义解释如下:
USE:如果想使用哪个数据库,直接使用USE关键字即可。
(3)示例
使用已经创建的数据库weather,具体操作如图1-3所示。
use weather;
图1-3使用weather数据库
查看当前使用的是哪个数据库,具体操作如图1-4所示。
select current_database();
图1-4查看所使用的数据库
2.1.3 查询数据库
(1)展示所有数据库
1)语法
SHOW DATABASES [LIKE 'identifier_with_wildcards'];
2)解释
like通配表达式说明:*表示任意个任意字符,|表示或的关系。
示例
show databases like 'weath*';
操作如图1-5所示。
图1-5 展示数据库
(2)查看数据库信息
1)语法
DESCRIBE DATABASE [EXTENDED] db_name;
2)案例
图1-29 dataease主界面
2.4 dataease数据可视化分析步骤如下:
1. 创建数据源
(1)弹出图1-30所示界面,选择数据源,点击“+”,录入数据源相关信息,选择mysql数据库点击“保存”。
图1-30 添加数据源
创建数据集
如图10-43所示,选择数据集,点击“新建文件夹”,创建一个nev的文件夹。
图1-30创建文件夹
(2)使用如下语句创建统计地区访问用户量的前6条的数据集,具体操作如图1-31所示。
SELECT
sid_total,sessionid_total,ip_total,area,yearinfo,monthinfo
FROM visit_dws
WHERE grouptype='1'
LIMIT 6;
图1-31 创建统计地区访问用户量的数据集
(3)使用如下语句创建统计会话页面排行榜的数据集,具体操作如图1-32所示。
SELECT distinct
sessionid_total,from_url,yearinfo,monthinfo
FROM visit_dws
WHERE grouptype='3' AND from_url!=""
ORDER BY sessionid_total DESC
图1-32创建统计会话页面排行榜的数据集
(4)创建统计访问用户量的数据集,具体操作如图1-33所示。
SELECT distinct
sid_total,sessionid_total,ip_total,yearinfo,monthinfo
FROM visit_dws
WHERE grouptype='4';
图1-33创建统计访问用户量的数据集的数据集
(5)使用如下语句统计创建渠道访问用户量的数据集,具体操作如图1-34所示。
SELECT distinct
sid_total,sessionid_total,ip_total,origin_channel,yearinfo,monthinfo
FROM visit_dws WHERE grouptype='2';
图1-34创建统计创建渠道访问用户量的数据集
选择仪表板,点击+,创建一个文件夹,名字为nev,然后在文件中创建一个名为教育大数据分析的仪表板,具体操作如图1-35所示。
图1-35 创建仪表板
4添加不同视图
添加指标卡
添加访问用户量指标卡,点击视图按钮,添加一个访问用户量的视图,数据集为用户访问量,具体操作如图1-36所示。
图1-36 添加访问用户量视图
如图1-37所示,点击下一步按钮,选择指标卡,确定。
图1-37 选择图表类型
将sid_total拓展到指标栏,得到如图1-38所示。
图1-38设置指标栏
更改显示名称为sid统计访问用户量,效果如图10-52所示。
图1-38 更改显示名称
在样式中隐藏标题,效果如图1-39所示。
图1-39 隐藏标题
最后得到指标卡,效果如图1-40所示。
图1-40 指标卡效果图
采用复制并修改相应属性的方式,得到session_id访问用户量,ip访问用户量指标卡,效果如图1-41所示。
图1-41 指标卡效果图
(2)添加地区访问用户量视图,数据集合选择为地区访问用户量,图标类型为明星表。效果如图1-42所示:
图1-42 添加地区访问用户量视图
将area、sid_total、sessionid_total、ip_total拖拽到数据列。修改字段显示名称分别为地区、按照sid统计量、sessionid统计量、ip_total统计量,最后调整视图的大小和位置,得到如图1-43所示效果图。
图1-43 地区访问用户量视图效果图
(3)添加会话页面排行榜视图,数据集合选择为会话页面排行榜,图标类型为基础柱状图,from_url、sessionid拖拽到指标,结果展示前6条。效果如图1-44所示。
图1-44 会话页面排行榜视图
(4)添加渠道访问用户统计视图,数据集合选择为渠道访问用户量,图标类型为基础柱状图,origin_channel、ip_total拖拽到指标,结果展示前6条,显示图例和标签的维度。效果如图1-45所示。
图1-45 渠道访问用户统计视图
(5)从其他中拖拽一个文字组件作为标题,标题内容为教育大数据分析平台,效果如图1-46所示。
图1-46 添加标题
(6)点击仪表板样式,选择仪表板主题为:智慧数据。得到效果图如图1-47所示:
图1-47 教育大数据分析平台大屏效果图
是否应为“本地文文件”,请作者加以核实。
(11)重启电脑, 开始使用 . 收获慢慢……
clxxix